Programmable logic devices (PLDs) are a well-known type of digital integrated circuit that can be programmed to perform specified logic functions. One type of PLD, the field programmable gate array (FPGA), typically includes an array of configurable logic blocks (CLBs) surrounded by a ring of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a programmable interconnect structure. Some FPGAs also include additional logic blocks with special purposes (e.g., DLLs, RAM, and so forth).
The CLBs, IOBs, interconnect, and other logic blocks are typically programmed by loading a stream of configuration data (bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect are configured. The configuration data can be read from memory (e.g., an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Another type of PLD is the Complex Programmable Logic Device, or CPLD. A CPLD includes two or more programmable function blocks connected together and to input/output (I/O) resources by an interconnect switch matrix. Each function block of the CPLD includes a two-level AND/OR structure similar to those used in Programmable Logic Arrays (PLAs) and Programmable Array Logic (PAL) devices. In some CPLDs, configuration data is stored on-chip in non-volatile memory, then downloaded to volatile memory as part of an initial configuration sequence.
For all of these programmable logic devices (PLDs), the functionality of the device is controlled by data bits provided to the device for that purpose. The data bits can be stored in volatile memory (e.g., static RAM cells, as in FPGAs and some CPLDs), in non-volatile memory (e.g., FLASH memory, as in some CPLDs), or in any other type of memory cell.
Other PLDs are programmed by applying a processing layer, such as a metal layer, that programmably interconnects the various elements on the device. These PLDs are known as ASIC devices (Application Specific Integrated Circuits). PLDs can also be implemented in other ways, e.g., using fuse or antifuse technology.
Whatever type of architecture is used, PLDs generally include many programmable logic blocks of various types interconnected by a programmable interconnect structure. Other circuits included in the PLD might or might not be programmable. These additional circuits can include, for example, configuration logic and a clock distribution structure (clock tree).
FIG. 1 shows a typical PLD and the clock tree included in the PLD. The PLD includes a plurality of programmable logic blocks LB and an array or interconnect matrix (not shown) interconnecting the function blocks. In an FPGA, logic blocks LB correspond, for example, to IOBs or CLBs; in a CPLD, logic blocks LB correspond to function blocks or macrocells.
A PLD pad 101 is designated as the input clock pad, to which the system clock signal is supplied. The system clock signal is buffered (in inverting buffer 102) to reduce the capacitance of the system clock node, then is delivered to an approximate center point CP of the PLD. From center point CP, the clock signal is radially distributed to multiplexers M1-M4 and hence to inverting buffers B1-B4. The radial distribution equalizes the delay from the input clock pad 101 to the destination logic blocks LB.
The system clock signal is routed from center point CP to multiplexers M1-M4, which are individually controlled by configuration memory cells MC1-MC4 to pass either the system clock signal or a power high signal VDD. Each inverting buffer B1-B4 provides a selected signal to one quadrant of the PLD. Thus, if only a portion of the logic blocks are needed to implement a particular design, one or more quadrants can be left deliberately unused when logic is assigned to the logic blocks, and the corresponding multiplexer M1-M4 can be configured such that the corresponding clock buffer B1-B4 supplies the ground signal to the unused quadrant. In CMOS logic, power consumption is largely due to nodes changing state. Thus, grounding the clock signal for an entire quadrant of the device can potentially cut power usage of the PLD as a whole by as much as twenty-five percent.
FIG. 2 shows another prior art PLD, in which a further level of clock control is provided by including for each logic block a programmable clock buffer CB, interposed between inverting buffer B1-B4 and the input clock terminal of the logic block. Programmable clock buffer CB typically has the ability to select either the true or the complement clock signal for the logic block. Lo et al., in U.S. Pat. No. 6,456,126 B1, describe several such clock buffers, as well as several clock buffers having the additional capability of adding a programmable clock doubler function.
The PLDs of FIGS. 1 and 2 include programmable clock trees wherein the power consumption of the PLD can be reduced by disabling the clock signal for one or more quadrants of the device. However, this scheme is only effective if the design implemented in the PLD uses up to three-fourths of the PLD, which can require the purchase of a more expensive PLD than might otherwise be required. Further, all input and output pads for the design must then be mapped to portions of the PLD having an enabled clock signal, which can make board design more difficult. Therefore, it is desirable to provide PLDs having clock trees that offer alternative methods of reducing power consumption. It is further desirable to provide clock buffers offering programmable functions in addition to those described above.